/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function (nums) {
  // 处理空数组的情况
  if (nums.length === 0) return 0;

  // 使用Set存储所有数字，便于O(1)时间复杂度的查找
  const numSet = new Set(nums);
  let maxLength = 0;

  // 遍历集合中的每个数字
  for (const num of numSet) {
    // 只有当num-1不在集合中时，才以num作为序列的起点
    // 这确保了我们不会重复计算同一个序列
    if (!numSet.has(num - 1)) {
      let currentNum = num;
      let currentLength = 1;

      // 查找连续的数字，计算当前序列长度
      while (numSet.has(currentNum + 1)) {
        currentNum++;
        currentLength++;
      }

      // 更新最大长度
      maxLength = Math.max(maxLength, currentLength);
    }
  }

  return maxLength;
};

// 测试案例
console.log(longestConsecutive([100, 4, 200, 1, 3, 2])); // 输出: 4
console.log(longestConsecutive([0, 3, 7, 2, 5, 8, 4, 6, 0, 1])); // 输出: 9
console.log(longestConsecutive([1, 0, 1, 2])); // 输出: 3
console.log(longestConsecutive([])); // 输出: 0
